﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using Entidades.Sistema.Produccion;
using System.ComponentModel.DataAnnotations;

namespace Entidades.Sistema.Venta
{
    public class Producto
    {
        private int _idProducto;
        private string _estado;
        private string _descripcion;
        private string _nombre;
        private Decimal _precioLista;
        private int _diasVencimiento;
        private TipoProducto _tipoProducto;
        private int _cantidadPorUnidadProd;
        private int _cantidadPorTurno;
        private Unidad _unidad;
        private Decimal _alicuota;
        private decimal _pesoneto;

        public Producto()
        {
            TipoProducto = new TipoProducto();
            Unidad = new Unidad();
        }

        public int IdProducto
        {
            get{ return _idProducto; }
            set{ _idProducto = value; }
        }
        public string Estado
        {
            get { return _estado; }
            set { _estado = value; }
        }
        [Required(ErrorMessage = "La descripción del producto es requerido.")]
        public string Descripcion
        {
            get { return _descripcion; }
            set { _descripcion = value; }
        }
        public string Nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }

        public Decimal PrecioLista
        {
            get { return _precioLista; }
            set { _precioLista = value; }
        }

        public int DiasVencimiento
        {
            get { return _diasVencimiento; }
            set { _diasVencimiento = value; }
        }

        [Required(ErrorMessage = "Tipo Producto Es Requerido")]
        public TipoProducto TipoProducto
        {
            get { return _tipoProducto; }
            set { _tipoProducto = value; }
        }

        public int CantidadPorUnidadProd
        {
            get { return _cantidadPorUnidadProd; }
            set { _cantidadPorUnidadProd = value; }
        }
        [Range(18, 100, ErrorMessage = "Must be between 18 and 100")]
        public int CantidadPorTurno
        {
            get { return _cantidadPorTurno; }
            set { _cantidadPorTurno = value; }
        }

        [Required(ErrorMessage = "Unidad Es Requerida")]
        public Unidad Unidad
        {
            get { return _unidad; }
            set { _unidad = value; }
        }
        public Decimal PesoNeto
        {
            get { return _pesoneto; }
            set { _pesoneto = value;}
        }
        public Decimal Alicuota
        {
            get { return _alicuota; }
            set { _alicuota = value; }
        }
        public decimal ValorIva
        {
            get { return this.PrecioLista * this.Alicuota / 100;}
        }
        public decimal PrecioConIva
        {
            get {  
                if (this.Alicuota != 0)
                {
                    return this.PrecioLista + ValorIva;
                }
                else
                {
                    return this.PrecioLista;
                }
            }
        } 
    }    
}
